package test01.demo05;

/**
 * 枚举类 - 专门用于定义一些预设选项的类
 * <p>
 * 普通类 - 封装属性、方法 - 实现具体的业务操作
 *
 * @author ZQX
 * @date 2025-04-09
 */
public enum Grade {
    // 枚举类中声明的每一个枚举值代表枚举类的一个实例对象。
    // public static final Grade A = new Grade() ;
    // public static final Grade A = new Grade("优秀") ;
    // 访问枚举值： 枚举类名.枚举值
    // A, B, C, D, E;

    /**
     * A：优秀，分数在90-100之间
     * 接口 对象 = new 接口(){
     *     重写方法
     * };
     */
    A("优秀") {
        @Override
        public String getScoreRange() {
            return "A：优秀，分数在90-100之间";
        }
    },

    /**
     * B：良好，分数在80-90之间
     */
    B("良好"){
        @Override
        public String getScoreRange() {
            return "B：良好，分数在80-90之间";
        }
    },

    /**
     * C：中等，分数在70-80之间
     */
    C("中等") {
        @Override
        public String getScoreRange() {
            return "C：中等，分数在70-80之间";
        }
    },

    /**
     * D：合格，分数在60-70之间
     */
    D("合格"){
        @Override
        public String getScoreRange() {
            return "D：合格，分数在60-70之间";
        }
    },

    /**
     * E：不合格，分数在0-60之间
     */
    E("不合格") {
        @Override
        public String getScoreRange() {
            return "E：不合格，分数在0-60之间";
        }
    };

    /**
     * 成员变量 - 定义每个等级的中文描述
     */
    private String value;

    /**
     * 常量
     */
    public final static double PI = 3.14;

    // 构造方法
    Grade() {
    }

    // 重载构造方法
    Grade(String value) {
        this.value = value;
    }

    /**
     * 重写方法
     *
     * @return value，等级中文描述
     */
    @Override
    public String toString() {
        return this.value;
    }


    /**
     * 静态方法
     */
    public static void testStatic() {
        System.out.println("我是枚举类中定义的静态方法...");
    }

    /**
     * 成员方法
     */
    public void sayHello() {
        System.out.println("我是枚举类中定义的成员方法");
    }


    /**
     * 抽象方法 - 创建枚举值时，必须以匿名内部类的方式创建，并且重写枚举类的抽象方法
     *
     * @return
     */
    public abstract String getScoreRange();


}
